package com.uva.dbcs.web.beans.gestionDeVehiculos;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;

import com.uva.dbcs.gestionDeVehiculos.despliegue.GestorDeVehiculosLocal;
import com.uva.dbcs.gestionDeVehiculos.dominio.Fabricante;
import com.uva.dbcs.gestionDeVehiculos.dominio.Modelo;
import com.uva.dbcs.utilidades.dominio.TipoCarnet;

@ManagedBean
@ViewScoped
public class ModelosBean implements Serializable {

	private static final long serialVersionUID = 1L;

	private String fabricanteSeleccionado;

	private Map<String, String> fabricantesMap;

	private List<Fabricante> fabricantes;

	private String nombreModelo;

	private int puertasModelo;

	private int annoModelo;

	private double anchoModelo;

	private double largoModelo;
	
	private double pesoModelo;
	
	private double costeAlquilerModelo;

	private boolean gpsModelo;

	private String[] carnetsModelo;

	private List<String> carnetsString;
	
	private List<Modelo> modelos;
	
	private List<Modelo> modelosFiltrados;

	@EJB
	GestorDeVehiculosLocal gestorDeVehiculos;
	
	

	@PostConstruct
	public void init() {

		carnetsString = new ArrayList<String>();
		fabricantes = gestorDeVehiculos.getFabricantes();
		modelos = gestorDeVehiculos.getModelos();

		// construir el mapa de fabricantes

		fabricantesMap = new HashMap<String, String>();

		for (Fabricante f : fabricantes) {
			fabricantesMap.put(f.getNombre(), f.getNombre());
		}

		// construir la lista de strings de carnets

		carnetsString = new ArrayList<String>();

		for (TipoCarnet c : TipoCarnet.values()) {
			carnetsString.add(c.name());
		}
		

	}

	public String getFabricanteSeleccionado() {
		return fabricanteSeleccionado;
	}

	public void setFabricanteSeleccionado(String fabricanteSeleccionado) {
		this.fabricanteSeleccionado = fabricanteSeleccionado;
	}

	public Map<String, String> getFabricantesMap() {
		return fabricantesMap;
	}

	public void setFabricantesMap(Map<String, String> fabricantesMap) {
		this.fabricantesMap = fabricantesMap;
	}

	public String getNombreModelo() {
		return nombreModelo;
	}

	public void setNombreModelo(String nombreModelo) {
		this.nombreModelo = nombreModelo;
	}

	public int getPuertasModelo() {
		return puertasModelo;
	}

	public void setPuertasModelo(int puertasModelo) {
		this.puertasModelo = puertasModelo;
	}

	public double getAnchoModelo() {
		return anchoModelo;
	}

	public void setAnchoModelo(double anchoModelo) {
		this.anchoModelo = anchoModelo;
	}

	public double getLargoModelo() {
		return largoModelo;
	}

	public void setLargoModelo(double largoModelo) {
		this.largoModelo = largoModelo;
	}

	public double getCosteAlquilerModelo() {
		return costeAlquilerModelo;
	}

	public void setCosteAlquilerModelo(double costeAlquilerModelo) {
		this.costeAlquilerModelo = costeAlquilerModelo;
	}

	public boolean isGpsModelo() {
		return gpsModelo;
	}

	public void setGpsModelo(boolean gpsModelo) {
		this.gpsModelo = gpsModelo;
	}

	public String[] getCarnetsModelo() {
		return carnetsModelo;
	}

	public void setCarnetsModelo(String[] carnetsModelo) {
		this.carnetsModelo = carnetsModelo;
	}

	public List<Fabricante> getFabricantes() {
		return fabricantes;
	}

	public void setFabricantes(List<Fabricante> fabricantes) {
		this.fabricantes = fabricantes;
	}

	public void nuevoModelo() {

		// carnets seleccionados

		TipoCarnet[] carnets = new TipoCarnet[carnetsModelo.length];

		for (int i = 0; i < carnetsModelo.length; i++) {

			carnets[i] = TipoCarnet.valueOf(carnetsModelo[i]);

		}

		// fabricante seleccionado

		Fabricante seleccion = null;

		for (Fabricante f : fabricantes) {

			if (f.getNombre().equals(fabricanteSeleccionado)) {

				seleccion = f;
				break;
			}
		}

		gestorDeVehiculos.crearNuevoModelo(anchoModelo, annoModelo,
				costeAlquilerModelo, gpsModelo, largoModelo, nombreModelo,
				pesoModelo, puertasModelo, seleccion.getIdfabricante(), carnets);

		// mostrar mensaje de confirmacion
		FacesContext.getCurrentInstance().addMessage(null,
				new FacesMessage("Modelo creado correctamente"));
		
		// actualizar la tabla, actualizamos los modelos
		this.modelos = gestorDeVehiculos.getModelos();

	}

	public List<String> getCarnetsString() {
		return carnetsString;
	}

	public void setCarnetsString(List<String> carnetsString) {
		this.carnetsString = carnetsString;
	}

	public int getAnnoModelo() {
		return annoModelo;
	}

	public void setAnnoModelo(int annoModelo) {
		this.annoModelo = annoModelo;
	}

	public double getPesoModelo() {
		return pesoModelo;
	}

	public void setPesoModelo(double pesoModelo) {
		this.pesoModelo = pesoModelo;
	}

	public List<Modelo> getModelos() {
		return modelos;
	}

	public void setModelos(List<Modelo> modelos) {
		this.modelos = modelos;
	}

	public List<Modelo> getModelosFiltrados() {
		return modelosFiltrados;
	}

	public void setModelosFiltrados(List<Modelo> modelosFiltrados) {
		this.modelosFiltrados = modelosFiltrados;
	}

	


}
